package com.swak.consistency.tcc.role.impls;

import com.swak.consistency.core.execption.ConsistencyException;
import com.swak.consistency.tcc.context.Phase;
import com.swak.consistency.tcc.context.TccContext;
import com.swak.consistency.tcc.context.TransParticipant;
import com.swak.consistency.tcc.role.AbstractTransRoler;

/**
 * 事务消费：
 * 
 * 嵌套的事务（其实一般情况下不会出现这个情况）
 * 
 * @author DELL
 */
public class TransConsumer extends AbstractTransRoler {

	@Override
	public Object doHandle(TccContext context) {

		// 准备阶段
		if (context.getPhase() != Phase.READY) {
			throw new ConsistencyException("事务消费  - 事务已经提交，不能加入到当前事务:" + context.toString());
		}

		// 开启分支事务
		TransParticipant branch = this.openBranchTrans(context);

		// 执行业务代码
		Object result = this.doPrepare(context);

		// 确定分支事务
		this.postBranchTrans(context, branch);

		// 返回结果
		return result;
	}
}